#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Maxn=2e5+6;
int n;

struct node{
    int v,w,id;
    node(int v=0,int w=0,int id=0):v(v),w(w),id(id){}
};

vector<node>e[Maxn];
vector<node>child[Maxn];

ll g[Maxn][22],h[Maxn];
ll ans[Maxn];
ll out[Maxn][22],now[22];

void dfs1(int u,int ft){
    ll val[22],vak[22][22];
    memset(val,0,sizeof val);
    memset(vak,0,sizeof vak);
    for(auto i:e[u]){
        int v=i.v,w=i.w;
        if(v==ft) continue;
        child[u].emplace_back(i);
        dfs1(v,u);
        for(int j=1;j<=21;j++) val[min(j,w)]+=g[v][j];
        for(int j=1;j<=21;j++)
            for(int k=1;k<=21;k++)
                vak[min(j,w)][min(k,w)]+=g[v][j]*g[v][k];
        for(int k=1;k<=21;k++){
            g[u][min(k,w)]+=g[v][k];
        }
        h[u]+=h[v];
    }
    g[u][21]++;
    for(int i=1;i<=20;i++) h[u]+=g[u][i]*i;
    ll ret=0;
    for(int i=1;i<=20;i++)
        for(int j=1;j<=20;j++){
            ret+=min(i,j)*(val[i]*val[j]-vak[i][j]);
        }
    h[u]+=ret/2;
}


void dfs2(int u){
    int len=child[u].size();
    ll suf[len+2][22],pre[len+2][22];
    for(int i=1;i<=21;i++) suf[len+1][i]=pre[0][i]=0;

    for(int i=1;i<=len;i++){
        int v=child[u][i-1].v,w=child[u][i-1].w;
        for(int j=1;j<=21;j++) pre[i][j]=pre[i-1][j];
        for(int j=1;j<=21;j++) pre[i][min(j,w)]+=g[v][j];
    }
    for(int i=len;i;i--){
        int v=child[u][i-1].v,w=child[u][i-1].w;
        for(int j=1;j<=21;j++) suf[i][j]=suf[i+1][j];
        for(int j=1;j<=21;j++) suf[i][min(j,w)]+=g[v][j];
    }
    for(int i=1;i<=len;i++){
        int v=child[u][i-1].v,w=child[u][i-1].w,id=child[u][i-1].id;
        for(int j=1;j<=20;j++) now[j]=pre[i-1][j]+suf[i+1][j]+out[u][j];
        for(int j=1;j<=20;j++)
            for(int k=1;k<=20;k++)
                ans[id]+=g[v][j]*now[k]*min(min(j,k),w);
        for(int j=1;j<=20;j++) ans[id]+=(g[v][j]+now[j])*min(j,w);
        ans[id]+=w;
        for(int j=1;j<=20;j++) out[v][min(j,w)]+=now[j];
        out[v][w]++;
    }

    for(auto i:child[u]){
        int v=i.v;
        dfs2(v);
    }
}

int main(){
    freopen("tatooine.in","r",stdin);
    freopen("tatooine.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<n;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        e[u].emplace_back(node(v,w,i));
        e[v].emplace_back(node(u,w,i));
    }
    
    dfs1(1,0);
    dfs2(1);
    for(int i=1;i<n;i++) printf("%lld\n",h[1]-ans[i]); 


    // system("pause");
    return 0;
}
/*
时间复杂度 O(nV)
显然的换根DP，看起来 O(nV^2).

2
1 2 3

3
1 2 4
3 2 5

5
4

4
2 1 10
3 1 1
4 1 5

7
1 2 5
2 4 6
2 5 2
1 3 7
3 6 1
3 7 4


*/